/***********************************************************************************
** MIT License                                                                    **
**                                                                                **
** Copyright (c) 2018 Victor DENIS (victordenis01@gmail.com)                      **
**                                                                                **
** Permission is hereby granted, free of charge, to any person obtaining a copy   **
** of this software and associated documentation files (the "Software"), to deal  **
** in the Software without restriction, including without limitation the rights   **
** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell      **
** copies of the Software, and to permit persons to whom the Software is          **
** furnished to do so, subject to the following conditions:                       **
**                                                                                **
** The above copyright notice and this permission notice shall be included in all **
** copies or substantial portions of the Software.                                **
**                                                                                **
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR     **
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,       **
** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE    **
** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER         **
** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,  **
** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE  **
** SOFTWARE.                                                                      **
***********************************************************************************/

#include "ExternalJsObject.hpp"


#include "Web/WebPage.hpp"

#include "Utils/AutoFillJsObject.hpp"

namespace Sn {
static QHash<QString, QObject*> s_extraObjects;

void ExternalJsObject::setupWebChannel(QWebChannel* webChannel, WebPage* page)
{
	webChannel->registerObject("sn_object", new ExternalJsObject(page));

	for (auto it = s_extraObjects.constBegin(); it != s_extraObjects.constEnd(); ++it) 
		webChannel->registerObject("sn_" + it.key(), it.value());
}

void ExternalJsObject::registerExtraObject(const QString& id, QObject* object)
{
	s_extraObjects[id] = object;
}

void ExternalJsObject::unregisterExtraObject(const QString& id)
{
	s_extraObjects.remove(id);
}

ExternalJsObject::ExternalJsObject(WebPage* page) :
	QObject(page),
	m_page(page),
	m_autoFill(new AutoFillJsObject(this))
{
	// Empty
}

WebPage* ExternalJsObject::page() const
{
	return m_page;
}

QObject* ExternalJsObject::autoFill() const
{
	return m_autoFill;
}

}
